#ifndef _TERRAIN
#define _TERRAIN

#include "Cases.h"

struct sTerrain
{
	int dimx;
	int dimy;
	int scrollx;
	int scrolly;
	Cases * cases;
};
typedef struct sTerrain Terrain;


/* Procédure : InitialisationTerrain 
Précondition : t est bien créé
Postcondition : initialise d'abord dimx et dimy de la structure Terrain et alloue un tableau de Cases dans le tas 
Paramètre en mode donnée-résultat : t */
void InitialisationTerrain (Terrain * t, int dimx, int dimy);

/*Fonction : ObtientCasesTerrain -> Cases
Précondition : t est bien initialisé, 0<=x<=(*t).dimx  et 0<=y<=(*t).dimy  
Postcondition : permet d'obtenir une case du tableau de Cases de la structure Terrain 
	        Cette case peut etre modifier 
Paramètre en mode donnée : x et y
Paramètre en mode donnée-résultat : t */
Cases * ObtientCasesTerrain (Terrain * t, int x, int y);

/* Fonction : ObtientConstCasesTerrain -> Cases
Précondition :  t est bien initialisé, 0<=x<=(*t).dimx  et 0<=y<=(*t).dimy 
Postcondition : permet d'obtenir une case du tableau de Cases de la structure Terrain 
	        Cette case ne peut pas etre modifier 
Paramètre en mode donnée : x et y
Paramètre en mode donnée-résultat : t */
const Cases * ObtientConstCasesTerrain (const Terrain * t, int x, int y);

/* Procédure :  DestructionTerrain 
Précondition : t est bien initialisé
Postcondition : libère le tableau de Cases de la structure Terrain apres avoir détruit une à une les cases se trouvant dans le tableau 
Paramètre en mode donnée-résultat : t */
void DestructionTerrain (Terrain * t);

/* Procédure :  TerrainTestRegression() 
Précondition : aucune
Postcondition : teste toutes les fonctions, procédures du module Terrain */
void TerrainTestRegression();

#endif
